python
1-LLMChain.ipynb
from langchain_core.prompts import PromptTemplate
from langchain_community.llms import Tongyi # 导入通义千问Tongyi模型
import dashscope
import os
# 从环境变量获取 dashscope 的 API Key
api_key = os.getenv('DASHSCOPE_API_KEY')
dashscope.api_key = api_key
# 加载 Tongyi 模型
llm = Tongyi(model_name="qwen-turbo", dashscope_api_key=api_key)
# 创建Prompt Template
prompt = PromptTemplate(
input_variables=["product"],
template="What is a good name for a company that makes {product}?",
)
# 新推荐用法:将 prompt 和 llm 组合成一个"可运行序列"
chain = prompt | llm
# 使用 invoke 方法传入输入
result1 = chain.invoke({"product": "colorful socks"})
print(result1)
python
1-LLMChain.py
from langchain_core.prompts import PromptTemplate
from langchain_community.llms import Tongyi # 导入通义千问Tongyi模型
import dashscope
import os
# 从环境变量获取 dashscope 的 API Key
api_key = os.getenv('DASHSCOPE_API_KEY')
dashscope.api_key = api_key
# 加载 Tongyi 模型
llm = Tongyi(model_name="qwen-turbo", dashscope_api_key=api_key) # 使用通义千问qwen-turbo模型
# 创建Prompt Template
prompt = PromptTemplate(
input_variables=["product"],
template="What is a good name for a company that makes {product}?",
)
# 新推荐用法:将 prompt 和 llm 组合成一个"可运行序列"
chain = prompt | llm
# 使用 invoke 方法传入输入
result1 = chain.invoke({"product": "colorful socks"})
print(result1)
result2 = chain.invoke({"product": "广告设计"})
print(result2)
2-LLMChain.ipynb
import os from langchain_community.agent_toolkits.load_tools import load_tools from langchain_community.chat_models import ChatTongyi from langchain.agents import create_agent import dashscope # 从环境变量获取 dashscope 的 API Key api_key = os.getenv('DASHSCOPE_API_KEY') dashscope.api_key = api_key # 加载模型 (使用 ChatModel 以支持 tool calling) llm = ChatTongyi(model_name="qwen-turbo", dashscope_api_key=api_key) # 加载 serpapi 工具 tools = load_tools(["serpapi"]) # LangChain 1.x 新写法 agent = create_agent(llm, tools) # 运行 agent result = agent.invoke({"messages": [("user", "今天是几月几号?历史上的今天有哪些名人出生")]}) print(result["messages"][-1].content)
2-LLMChain.py
import os from langchain_community.agent_toolkits.load_tools import load_tools from langchain_community.chat_models import ChatTongyi from langchain.agents import create_agent import dashscope # 从环境变量获取 dashscope 的 API Key api_key = os.getenv('DASHSCOPE_API_KEY') dashscope.api_key = api_key # 加载模型 (使用 ChatModel 以支持 tool calling) llm = ChatTongyi(model_name="qwen-turbo", dashscope_api_key=api_key) # 加载 serpapi 工具 tools = load_tools(["serpapi"]) # LangChain 1.x 新写法 agent = create_agent(llm, tools) # 运行 agent result = agent.invoke({"messages": [("user", "今天是几月几号?历史上的今天有哪些名人出生")]}) print(result["messages"][-1].content)
3-LLMChain.ipynb
import os from langchain_community.agent_toolkits.load_tools import load_tools from langchain_community.chat_models import ChatTongyi from langchain.agents import create_agent from langchain_core.tools import tool import dashscope # 从环境变量获取 dashscope 的 API Key api_key = os.getenv('DASHSCOPE_API_KEY') dashscope.api_key = api_key # 加载模型 (使用 ChatModel 以支持 tool calling) llm = ChatTongyi(model_name="deepseek-v3", dashscope_api_key=api_key) # 自定义数学计算工具 (替代已废弃的 llm-math) @tool def calculator(expression: str) -> str: """计算数学表达式。只接受数字和运算符,例如: 2+2, 100/4, 32*1.8+32。不要使用变量名或占位符。""" # 只允许数字、运算符和括号 import re if not re.match(r'^[\d\s\+\-\*\/\.\(\)]+$', expression): return f"错误: 表达式 '{expression}' 包含无效字符。请只使用数字和运算符(+,-,*,/)" return str(eval(expression)) # 加载 serpapi 工具 + 自定义计算器 serpapi_tools = load_tools(["serpapi"]) tools = serpapi_tools + [calculator] # LangChain 1.x 新写法 agent = create_agent(llm, tools) # 运行 agent result = agent.invoke({"messages": [("user", "当前北京的温度是多少华氏度?这个温度的1/4是多少")]}) print(result["messages"][-1].content)
3-LLMChain.py
#%% import os from langchain_community.agent_toolkits.load_tools import load_tools from langchain_community.chat_models import ChatTongyi from langchain.agents import create_agent from langchain_core.tools import tool import dashscope # 从环境变量获取 dashscope 的 API Key api_key = os.getenv('DASHSCOPE_API_KEY') dashscope.api_key = api_key # 加载模型 (使用 ChatModel 以支持 tool calling) llm = ChatTongyi(model_name="deepseek-v3", dashscope_api_key=api_key) # 自定义数学计算工具 (替代已废弃的 llm-math) @tool def calculator(expression: str) -> str: """计算数学表达式。只接受数字和运算符,例如: 2+2, 100/4, 32*1.8+32。不要使用变量名或占位符。""" # 只允许数字、运算符和括号 import re if not re.match(r'^[\d\s\+\-\*\/\.\(\)]+$', expression): return f"错误: 表达式 '{expression}' 包含无效字符。请只使用数字和运算符(+,-,*,/)" return str(eval(expression)) # 加载 serpapi 工具 + 自定义计算器 serpapi_tools = load_tools(["serpapi"]) tools = serpapi_tools + [calculator] # LangChain 1.x 新写法 agent = create_agent(llm, tools) # 运行 agent result = agent.invoke({"messages": [("user", "当前北京的温度是多少华氏度?这个温度的1/4是多少")]}) print(result["messages"][-1].content)
4-ConversationChain.ipynb
import os from langchain_community.chat_models import ChatTongyi from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.chat_history import InMemoryChatMessageHistory from langchain_core.runnables.history import RunnableWithMessageHistory import dashscope # 从环境变量获取 dashscope 的 API Key api_key = os.getenv('DASHSCOPE_API_KEY') dashscope.api_key = api_key # 加载模型 llm = ChatTongyi(model_name="qwen-turbo", dashscope_api_key=api_key) # 创建带历史记录的 prompt prompt = ChatPromptTemplate.from_messages([ ("system", "You are a helpful assistant."), MessagesPlaceholder(variable_name="history"), ("human", "{input}") ]) # 创建 chain chain = prompt | llm # 存储会话历史 store = {} def get_session_history(session_id: str): if session_id not in store: store[session_id] = InMemoryChatMessageHistory() return store[session_id] # 创建带记忆的对话链 conversation = RunnableWithMessageHistory( chain, get_session_history, input_messages_key="input", history_messages_key="history" ) config = {"configurable": {"session_id": "default"}} # 第一轮对话 output = conversation.invoke({"input": "Hi there!"}, config=config) print(output.content)
4-ConversationChain.py
import os from langchain_community.chat_models import ChatTongyi from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.chat_history import InMemoryChatMessageHistory from langchain_core.runnables.history import RunnableWithMessageHistory import dashscope # 从环境变量获取 dashscope 的 API Key api_key = os.getenv('DASHSCOPE_API_KEY') dashscope.api_key = api_key # 加载模型 llm = ChatTongyi(model_name="qwen-turbo", dashscope_api_key=api_key) # 创建带历史记录的 prompt prompt = ChatPromptTemplate.from_messages([ ("system", "You are a helpful assistant."), MessagesPlaceholder(variable_name="history"), ("human", "{input}") ]) # 创建 chain chain = prompt | llm # 存储会话历史 store = {} def get_session_history(session_id: str): if session_id not in store: store[session_id] = InMemoryChatMessageHistory() return store[session_id] # 创建带记忆的对话链 conversation = RunnableWithMessageHistory( chain, get_session_history, input_messages_key="input", history_messages_key="history" ) config = {"configurable": {"session_id": "default"}} # 第一轮对话 output = conversation.invoke({"input": "Hi there!"}, config=config) print(output.content) # 第二轮对话 (会记住上一轮) output = conversation.invoke({"input": "I'm doing well! Just having a conversation with an AI."}, config=config) print(output.content)
5-product_llm.py
import os import textwrap import time from langchain_community.chat_models import ChatTongyi from langchain_core.tools import tool from langchain_core.prompts import PromptTemplate from langchain.agents import create_agent # 定义了LLM的Prompt Template CONTEXT_QA_TMPL = """ 根据以下提供的信息,回答用户的问题 信息:{context} 问题:{query} """ CONTEXT_QA_PROMPT = PromptTemplate( input_variables=["query", "context"], template=CONTEXT_QA_TMPL, ) # 输出结果显示,每行最多60字符,每个字符显示停留0.1秒(动态显示效果) def output_response(response: str) -> None: if not response: exit(0) for line in textwrap.wrap(response, width=60): for word in line.split(): for char in word: print(char, end="", flush=True) time.sleep(0.1) print(" ", end="", flush=True) print() print("----------------------------------------------------------------") # 从环境变量获取 API Key api_key = os.getenv('DASHSCOPE_API_KEY') # 定义LLM llm = ChatTongyi(model_name="qwen-turbo", dashscope_api_key=api_key) # 工具1:产品描述 @tool def find_product_description(product_name: str) -> str: """通过产品名称找到产品描述。输入产品名称如 Model 3, Model Y, Model X""" print('product_name=', product_name) product_info = { "Model 3": "具有简洁、动感的外观设计,流线型车身和现代化前脸。定价23.19-33.19万", "Model Y": "在外观上与Model 3相似,但采用了更高的车身和更大的后备箱空间。定价26.39-36.39万", "Model X": "拥有独特的翅子门设计和更加大胆的外观风格。定价89.89-105.89万", } return product_info.get(product_name, "没有找到这个产品") # 工具2:公司介绍 @tool def find_company_info(query: str) -> str: """当用户询问公司相关的问题时使用。输入用户的问题""" context = """ 特斯拉最知名的产品是电动汽车,其中包括Model S、Model 3、Model X和Model Y等多款车型。 特斯拉以其技术创新、高性能和领先的自动驾驶技术而闻名。公司不断推动自动驾驶技术的研发,并在车辆中引入了各种驾驶辅助功能,如自动紧急制动、自适应巡航控制和车道保持辅助等。 """ prompt = CONTEXT_QA_PROMPT.format(query=query, context=context) response = llm.invoke(prompt) return response.content # 定义工具集 tools = [find_product_description, find_company_info] # 创建 Agent agent = create_agent(llm, tools) if __name__ == "__main__": # 主过程:可以一直提问下去,直到Ctrl+C while True: user_input = input("请输入您的问题:") result = agent.invoke({"messages": [("user", user_input)]}) response = result["messages"][-1].content output_response(response)