当前位置: 首页 > news >正文

LangChain使用方法以OpenAI 的聊天模型GPT-4o为例

以使用 OpenAI 的聊天模型(如 GPT-4)为例,从设置环境、初始化模型、调用模型到处理响应的各个方面进行介绍:

1. 环境设置

  • 安装 langchain-openai 包。
  • 设置环境变量 OPENAI_API_KEY,用于认证(以linux为例,windows也可以手动添加环境变量)
pip install -U langchain-openai
export OPENAI_API_KEY="your-api-key"

2. 初始化参数

  • 模型参数:如模型名称、温度(temperature)、最大生成令牌数(max_tokens)等。
  • 客户端参数:如请求超时时间(timeout)、最大重试次数(max_retries)、API 密钥(api_key)等。
from langchain_openai import ChatOpenAIllm = ChatOpenAI(model="gpt-4o",temperature=0,max_tokens=None,timeout=None,max_retries=2,# api_key="...",# base_url="...",# organization="...",# other params...
)

3. 调用模型

  • 通过 invoke 方法调用模型,传入对话消息。
  • 支持同步和异步调用。
messages = [("system", "You are a helpful translator. Translate the user sentence to French."),("human", "I love programming."),
]
response = llm.invoke(messages)
print(response.content)

完整代码:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage# 使用LangChain调用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名称temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基础URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要这个参数
)
# 创建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一个有帮助的助手,请用中文回答用户的问题。"),HumanMessage(content="今天天气如何?")
]try:response = llm.invoke(messages)print(response.content)
except Exception as e:print(f"发生错误: {e}")

4. 流式响应

  • 使用 stream 方法获取流式响应,逐步处理生成的文本。
for chunk in llm.stream(messages):print(chunk.text(), end="")

完整代码:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage# 使用LangChain调用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名称temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基础URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要这个参数
)
# 创建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一个有帮助的助手,请用中文回答用户的问题。"),HumanMessage(content="今天天气如何?")
]try:for chunk in llm.stream(messages):print(chunk.text(), end="")
except Exception as e:print(f"发生错误: {e}")

5. 异步调用

  • 支持异步调用,适用于需要非阻塞操作的场景。
await llm.ainvoke(messages)

6. 工具调用

  • 可以绑定工具(如天气查询、人口查询等),模型会自动调用这些工具。
from pydantic import BaseModel, Fieldclass GetWeather(BaseModel):location: str = Field(..., description="The city and state, e.g. San Francisco, CA")llm_with_tools = llm.bind_tools([GetWeather])
response = llm_with_tools.invoke("What is the weather in LA?")

完整代码:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from pydantic import BaseModel, Fieldclass GetWeather(BaseModel):location: str = Field(..., description="The city and state, e.g. San Francisco, CA")# 使用LangChain调用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名称temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基础URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要这个参数
)llm_with_tools = llm.bind_tools([GetWeather])# 创建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一个有帮助的助手,请用中文回答用户的问题。"),HumanMessage(content="北京,今天天气如何?")
]try:for chunk in llm_with_tools.stream(messages):print(chunk.text(), end="")
except Exception as e:print(f"发生错误: {e}")

7. 内置工具

  • 使用 OpenAI 的内置工具,如搜索、文档解析等。
tool = {"type": "web_search"}
llm_with_tools = llm.bind_tools([tool])
response = llm_with_tools.invoke("What was a positive news story from today?")

8. 对话状态管理

  • 通过 previous_response_id 维护对话状态,确保对话连贯性。
response = llm.invoke("Hi, I'm Bob.")
second_response = llm.invoke("What is my name?", previous_response_id=response.response_metadata["id"])

9. 结构化输出

  • 可以指定输出格式为特定的 Pydantic 模型。
class Joke(BaseModel):setup: str = Field(description="The setup of the joke")punchline: str = Field(description="The punchline to the joke")structured_llm = llm.with_structured_output(Joke)
response = structured_llm.invoke("Tell me a joke about cats")

10. JSON 模式

  • 指定响应格式为 JSON 对象。
json_llm = llm.bind(response_format={"type": "json_object"})
response = json_llm.invoke("Return a JSON object with key 'random_ints' and a value of 10 random ints in [0-99]")

11. 图像输入

  • 支持将图像作为输入,模型可以处理图像内容。
import base64
import httpximage_url = "https://example.com/image.jpg"
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")
message = HumanMessage(content=[{"type": "text", "text": "describe the weather in this image"},{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}},]
)
response = llm.invoke([message])

12. 令牌使用

  • 获取每次调用的令牌使用情况,包括输入、输出和总令牌数。
response = llm.invoke(messages)
print(response.usage_metadata)

13. 日志概率

  • 获取生成文本的日志概率信息。
logprobs_llm = llm.bind(logprobs=True)
response = logprobs_llm.invoke(messages)
print(response.response_metadata["logprobs"])

14. 响应元数据

  • 获取响应的元数据,包括模型名称、完成原因等。
response = llm.invoke(messages)
print(response.response_metadata)

15. 灵活处理

  • 使用 OpenAI 的灵活处理(flex processing)服务,适用于非关键任务。
llm = ChatOpenAI(model="o4-mini", service_tier="flex")

16. OpenAI 兼容 API

  • 支持与 OpenAI 兼容的 API(如 LM Studio、vLLM 等),通过 extra_body 参数传递特定参数。
llm = ChatOpenAI(base_url="http://localhost:8000/v1",api_key="EMPTY",model="meta-llama/Llama-2-7b-chat-hf",extra_body={"use_beam_search": True, "best_of": 4},
)

17. 参数选择

  • 使用 model_kwargs 传递标准 OpenAI 参数。
  • 使用 extra_body 传递特定于兼容 API 的自定义参数。

18. 提示缓存优化

  • 使用 prompt_cache_key 参数优化缓存命中率,减少成本。
response = llm.invoke(messages, prompt_cache_key="example-key-a")

总结

本位提供了非常全面的指导,帮助开发者快速集成和使用 OpenAI 的聊天模型,包括环境设置、参数配置、调用方法、工具集成、响应处理等。


文章转载自:

http://pCHrM4xN.pcqxr.cn
http://N044nCRV.pcqxr.cn
http://qOwQJB7E.pcqxr.cn
http://klwVyffn.pcqxr.cn
http://Q9613RsM.pcqxr.cn
http://fz4JetIK.pcqxr.cn
http://piHXvMyT.pcqxr.cn
http://wGGgYSNh.pcqxr.cn
http://Ic0NwmpS.pcqxr.cn
http://QplXPLqW.pcqxr.cn
http://z60fJoEK.pcqxr.cn
http://kZeGtWR6.pcqxr.cn
http://CrFTTpkl.pcqxr.cn
http://T0Yojcyd.pcqxr.cn
http://iivUN6W5.pcqxr.cn
http://J02ORkXk.pcqxr.cn
http://UM4IHAyW.pcqxr.cn
http://ozg590c8.pcqxr.cn
http://Cx8N4HxI.pcqxr.cn
http://hwvHY4te.pcqxr.cn
http://d5oJg06h.pcqxr.cn
http://hCDgL2fI.pcqxr.cn
http://cNVzCe1r.pcqxr.cn
http://rdZgJhWl.pcqxr.cn
http://yEB1SYbC.pcqxr.cn
http://FYQqbDo4.pcqxr.cn
http://04M6OhwT.pcqxr.cn
http://YR68qrtv.pcqxr.cn
http://BxG3SKjh.pcqxr.cn
http://6fHH2VLJ.pcqxr.cn
http://www.dtcms.com/a/388095.html

相关文章:

  • CephFS存储文件系统介绍
  • Java Swagger2 能显示页面但看不到一个接口
  • SSL证书有效期缩短:自动化解决方案
  • C# 多线程编程 (.NET Framework 4.0)
  • 一个手艺活 - 跨语言编程
  • docker安装ollama、下载模型详细步骤
  • 微服务和分布式的基础学识
  • 自动化测试框架pytest---Json Schema
  • 阿里云PolarDB MySQL版与MCP集成方案:数据处理分析全流程的效能革命
  • Python实现霸王龙优化算法(Tyrannosaurus Optimization Algorithm, TROA)(附完整代码)
  • 弥合安全分析与故障仿真之间差距的方法
  • JavaEE---9.网络原理TCP/IP
  • @Value
  • 安装es、kibana、logstash
  • Leetcode-148.排序链表
  • 基于ETF底仓的网格交易系统实现动态参数优化与动量因子融合
  • C++底层刨析章节三: 函数对象与适配器:STL中的智能操作单元
  • MySQL多表联合查询与数据备份恢复全解析
  • 说说对React的理解?有哪些特性?
  • 深入理解 C 语言指针(二):数组与指针的深度绑定
  • 算法能力提升之树形结构-(线段树)
  • 小白实测:异地访问NAS所用的虚拟局域网使用感受及部署难度?!
  • js校验车架号VIN算法
  • MongoDB 8.0全面解析:性能提升、备份恢复与迁移指南
  • vue3如何配置不同的地址访问不同的项目
  • 苹果软件代码混淆,iOS混淆、iOS加固、ipa安全与合规取证注意事项(实战指南)
  • SQL-约束
  • [torch] 非线性拟合问题的训练
  • ubuntu设置ip流程
  • 【论文阅读】谷歌:生成式数据优化,只需请求更好的数据