04 ChatOpenAI类-输入参数1
参考链接:https://reference.langchain.com/python/integrations/langchain_openai/ChatOpenAI/?
参考链接:https://reference.langchain.com/python/integrations/langchain_openai/ChatOpenAI/?_gl=1*rammak*_gcl_au*MTE0NTQ0OC4xNzY3ODQyNTI1*_ga*MTU3ODc0MjQ4NC4xNzY3ODQyNTI1*_ga_47WX3HKKY2*czE3NjgxODY0OTkkbzkkZzEkdDE3NjgxODc5NzAkajYwJGwwJGgw
输入参数completion params
completion params指的是单次请求需要设定的参数

temperature
temperature 是一个控制生成文本的随机性和创造性的参数。它的取值范围通常在0到1之间,有时也可以超过1。具体来说,temperature 参数的作用如下:
低温度(接近0):模型生成的文本更确定和保守,倾向于选择概率最高的词。这种设置适合需要精确和一致性的任务,如回答事实性问题或生成技术文档。
高温度(接近1或更高):模型生成的文本更随机和多样化,可能会选择概率较低的词。这种设置适合需要创造性和多样性的任务,如写作创意内容或生成诗歌。
max_tokens
最大输出token数量限制
在尝试过程中发现通过ChatOpenAI调用deepseek,max token参数并无效果,因此用ChatDeepseek来尝试,分别设定100和50
from langchain.agents import create_agent
from langchain.messages import HumanMessage
from langchain_deepseek import ChatDeepSeek
from langchain_openai import ChatOpenAI
import os
model_test = ChatDeepSeek(
model="deepseek-chat",
api_key="sk-XXXX",
base_url="https://api.deepseek.com/v1",
max_tokens=100,
temperature=1
)
#运行agent,获得结果
result=model_test.invoke("how many kind of eth protocal")
print(result.content)
结果:
Excellent question. The term "Ethereum protocol" can refer to several layers and categories. Here��s a breakdown of the main kinds, from the foundational layer to application-layer protocols.
### 1. The Core Consensus & Execution Protocol (Layer 1)
This is the base Ethereum blockchain itself, often called "Mainnet." Its key protocol components are:
* **Execution Layer Protocol (The "Ethereum Virtual Machine" or EVM):** Defines the state, transactions,
修改max_tokens为50,再次运行结果:
Excellent question. The term "Ethereum protocol" can refer to different layers and components. Here��s a breakdown of the main kinds, from the foundational consensus layer to the application-level standards.
### 1. Core Consensus & Execution Protocols (
看着以上生成效果类似截断,而不是生成一个特定token范围内的完整回答
logprobs
`logprobs` 是 **对数概率(log probability)** 的缩写,它表示大模型在生成每个 token(词 / 字)时,对该 token 的预测概率的对数值
设置logprobs=True,再次运行,可以看到大模型返回了每个token概率的对数值
stream_options
参考链接:https://api-docs.deepseek.com/zh-cn/api/create-chat-completion
根据deepseek的API文档参考,此选项为stream流的设置选项
只有一个选项include_usage
如果设置为 true,在流式消息最后的 `data: [DONE]` 之前将会传输一个额外的块。
此块上的 usage 字段显示整个请求的 token 使用统计信息,而 choices 字段将始终是一个空数组。所有其他块也将包含一个 usage 字段,但其值为 null
from langchain.agents import create_agent
from langchain.messages import HumanMessage
from langchain_deepseek import ChatDeepSeek
from langchain_openai import ChatOpenAI
from langchain.tools import tool
import os
import math
model_test = ChatDeepSeek(
model="deepseek-chat",
api_key="sk-xxxx",
base_url="https://api.deepseek.com/v1",
max_tokens=20,
temperature=1,
name="test",
max_retries=3,
# timeout=1,
organization="deep",
stream=True,
stream_options={"include_usage":True}
)
#运行模型,获得结果
for result in model_test.stream("how many days of a year"):
print(result)
但是无论设置是True还是False,都会反馈tokens的使用情况,暂不清楚其原因

use_responses_api
参考链接:https://doc.ai-api.chat/openai-responses/
https://zhuanlan.zhihu.com/p/1954279596921975400
responses_api是OpenAI 最先进的模型响应接口。支持文本和图像输入,以及文本输出。创建与模型的有状态交互,将先前响应的输出用作输入。通过文件搜索、网络搜索、计算机使用等内置工具扩展模型的能力。使用函数调用允许模型访问外部系统和数据
输入参数client params
客户端相关设置参数,包含apikey,url等参数
timeout
限制单次请求的延时,现有问题需要消耗13.6s的时间,
from langchain.agents import create_agent
from langchain.messages import HumanMessage
from langchain_deepseek import ChatDeepSeek
from langchain_openai import ChatOpenAI
from langchain.tools import tool
import os
import math
model_test = ChatOpenAI(
model="deepseek-chat",
api_key="sk-xxxx",
base_url="https://api.deepseek.com/v1",
max_tokens=20,
temperature=1,
name="test",
max_retries=3,
# timeout=1
)
#运行模型,获得结果
result = model_test.invoke("how many days of a year")
print(result)
![]()
修改timeout参数为1s,再次运行,触发超时异常
max_retries
客户端设置的最大尝试次数,那是何种情况会进行重试呢?
在openai库的_base_client.py文件中的request函数中找到如下代码:
可以看到出现httpStatusError后,会基于max_retries参数进行重试次数的判断,而由_should_retry函数进行判断是否满足重试要求
可以看到判断条件有两种,一种是如果报文头中包含“x-should-retry”字段,则直接按照字段要求进行
另外根据状态码,在408、409、429、500四种情况进行重试,即请求超时、请求冲突、请求频繁、服务器内部错误
from langchain.agents import create_agent
from langchain.messages import HumanMessage
from langchain_deepseek import ChatDeepSeek
from langchain_openai import ChatOpenAI
from langchain.tools import tool
import os
import math
model_test = ChatOpenAI(
model="deepseek",
api_key="sk-XXXX",
base_url="https://api.deepseek.com/v1",
max_tokens=20,
temperature=1,
name="test",
max_retries=3,
)
#运行模型,获得结果
result = model_test.invoke("how many days of a year")
print(result)
修改模型名称为“deepseek”,可以触发400错误,提示模型不存在,由于400错误并不在重试的范围内,所以不会重试![]()
尝试修改_should_retry函数,将400错误纳入重试的范围,再次运行,可以看到400也会进行重试操作。
提醒:记得恢复_should_retry函数,避免影响其他程序
if response.status_code == 400:
log.debug("Retrying due to status code %i", response.status_code)
print("retry for code 400")
return True

organization
此参数用于组织的身份认证,可以用于确定此API请求使用计入哪个组织的配额,不明确的话就采用apikey对应的组织
参考链接:https://openai.apifox.cn/doc-2187079
更多推荐

所有评论(0)