langchain学习记录
import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI load_dotenv() def main() - None: api_key os.getenv(qwen_API_KEY) llm ChatOpenAI( modelqwen3-vl-plus, # 也可以换成 qwen-turbo / qwen-max 等 base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, api_keyapi_key, ) user_input input(请输入你的问题) resp llm.invoke(user_input) print(\n阿里通义千问回答) print(resp.content) if __name__ __main__: main()import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI def main(): api_key os.getenv(OPENAI_API_KEY) llm ChatOpenAI( modelqwen3-vl-plus, # 也可以换成 qwen-turbo / qwen-max 等 base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, api_keyapi_key, ) resp llm.invoke( [{role: user, content: 你叫什么名字}] ) print(resp.content) if __name__ __main__: main()import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain.agents import create_agent def main(): api_key os.getenv(OPENAI_API_KEY) llm ChatOpenAI( modelqwen3-vl-plus, # 也可以换成 qwen-turbo / qwen-max 等 base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, api_keyapi_key, ) agent create_agent( modelllm, tools[], system_prompt你是一个有帮助的助手。请简洁准确回答问题。 ) resp agent.invoke( {messages: [{role: user, content: 你叫什么名字}]} ) print(resp[messages][-1].content) if __name__ __main__: main()import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain.agents import create_agent from langchain.tools import tool tool def get_weather(city: str) - str: 获取指定城市的天气。 return f{city}今天是暴雨 def main(): api_key os.getenv(OPENAI_API_KEY) llm ChatOpenAI( modelqwen3-vl-plus, # 也可以换成 qwen-turbo / qwen-max 等 base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, api_keyapi_key, # temperature0.5, # max_tokens1024, # timeout60, ) agent create_agent( modelllm, tools[get_weather] ) resp agent.invoke( {messages: [{role: user, content: 郑州的天气如何}]} ) print(resp[messages][-1].content) if __name__ __main__: main()from langchain_openai import ChatOpenAI from langchain.agents import create_agent from langchain.agents.middleware import wrap_model_call, ModelRequest, ModelResponse api_key os.getenv(OPENAI_API_KEY) basic_model ChatOpenAI(modelqwen3-vl-plus, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1,api_keyapi_key) advanced_model ChatOpenAI(modeldeepseek-r1, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1,api_keyapi_key) wrap_model_call def dynamic_model_selection(request: ModelRequest, handler) - ModelResponse: 根据对话复杂性选择模型。 message_count len(request.state[messages]) # 这个长度指的是messages列表的长度而不是每个消息的长度 if message_count 10: # 对较长的对话使用高级模型 model advanced_model else: model basic_model request.model model return handler(request) print(f使用动态模型选择{basic_model.model_name}) agent create_agent( modelbasic_model, # 默认模型 tools[], middleware[dynamic_model_selection] ) resp agent.invoke( {messages: [{role: user, content: 我家住在河南省郑州市金水区我想问今天我家的天气如何}]} ) print(resp[messages][-1].content)from langchain.tools import tool from langchain.agents import create_agent from langchain.agents import create_agent from langchain.agents.middleware import wrap_tool_call from langchain_core.messages import ToolMessage import json llm ChatOpenAI(modelqwen3-vl-plus, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1,api_keyapi_key) tool def search(query: str) - str: 搜索信息。 return f结果{query} tool def get_weather(location: str) - str: 获取位置的天气信息。 return f{location} 的天气晴朗72°F wrap_tool_call def handle_tool_errors(request, handler): 使用自定义消息处理工具执行错误。 try: return handler(request) except Exception as e: # 向模型返回自定义错误消息 return ToolMessage( contentf工具错误请检查您的输入并重试。({str(e)}), tool_call_idrequest.tool_call[id] ) agent create_agent( modelllm, tools[search, get_weather], middleware[handle_tool_errors] ) res agent.invoke( {messages: [{role: user, content: 旧金山的天气怎么样}]} ) print(res[messages][-1].content)#from typing import TypedDict from langchain.agents import create_agent from langchain.agents.middleware import dynamic_prompt, ModelRequest from langchain.tools import tool class Context(TypedDict): user_role: str llm ChatOpenAI(modelqwen3-vl-plus, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1,api_keyapi_key) tool def web_search(query: str) - str: 模拟网络搜索。 return f搜索结果{query} dynamic_prompt def user_role_prompt(request: ModelRequest) - str: 根据用户角色生成系统提示。 user_role request.runtime.context.get(user_role, user) base_prompt 你是一个有帮助的助手。 if user_role expert: return f{base_prompt} 提供详细的技术响应。 elif user_role beginner: return f{base_prompt} 简单解释概念避免使用行话。 return base_prompt agent create_agent( modelllm, tools[web_search], middleware[user_role_prompt], context_schemaContext ) # 系统提示将根据上下文动态设置 res agent.invoke( {messages: [{role: user, content: 解释机器学习}]}, context{user_role: expert} ) print(res[messages][-1].content)# 结构化输出 from pydantic import BaseModel from langchain.agents import create_agent from langchain.agents.structured_output import ToolStrategy, ProviderStrategy from langchain.tools import tool llm ChatOpenAI(modelqwen3-vl-plus, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1,api_keyapi_key) tool def search_tool(query: str) - str: 模拟网络搜索。 return f搜索结果{query} class ContactInfo(BaseModel): name: str email: str phone: str agent create_agent( modelllm, tools[search_tool], response_formatProviderStrategy(ContactInfo) #ProviderStrategy(ContactInfo)供应商提供的结构化输出 ToolStrategy(ContactInfo)是狼豺你提供的结构化输出 ) result agent.invoke({ messages: [{role: user, content: 从以下内容提取联系信息John Doe, johnexample.com, (555) 123-4567}] }) result[structured_response] # ContactInfo(nameJohn Doe, emailjohnexample.com, phone(555) 123-4567)