参考链接: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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐