langchain本身提供的ChatOpenAI存在一定问题:
1.max_tokens无法起作用,即便设置了8192,最大max_tokens任然是4096
2.如果使用的deepseek-reasoner推理模型,原始返回的reasoning_content会被丢弃,导致无法拿到思维链信息
使用BaseChatModel自定义封装DeepSeekLLM
import json
import typing
from typing import Optional, Any, List, Dict, Union, Sequence, Callable, Literal
import requests
from langchain_core.callbacks import CallbackManagerForLLMRun
from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.messages import HumanMessage, AIMessage, BaseMessage
from langchain_core.messages import SystemMessage
from langchain_core.outputs import ChatResult, ChatGeneration
from langchain_core.prompts import PromptTemplate
from langchain_core.tools import BaseTool
from config.settings import deepseek_settings
from core.utils.base_utils import BaseUtils
from core.utils.my_logger import logger
class DeepSeekLLM(BaseChatModel):
api_key: str = deepseek_settings.api_key
base_url: str = deepseek_settings.base_url
model: str = deepseek_settings.model
max_tokens: int = deepseek_settings.max_tokens
temperature: float = deepseek_settings.temperature
timeout: int = deepseek_settings.timeout
streaming: bool = deepseek_settings.streaming
# 对话历史记录(维护多轮上下文)
conversation_history: List[BaseMessage] = []
# 工具列表
tools: List[dict] = []
def bind_tools(self, tools: Sequence[
Union[typing.Dict[str, Any], type, Callable, BaseTool] # noqa: UP006
], *, tool_choice: Optional[Union[str, Literal["any"]]] = None, **kwargs: Any) -> "DeepSeekLLM":
"""添加工具,以deepseek形式"""
formatted_tools = []
for tool in tools:
if isinstance(tool, BaseTool):
formatted_tool = {
"type": "function",
"function": {
"name": tool.name,
"description": tool.description,
"parameters": tool.args_schema.schema() if tool.args_schema else {}
}
}
formatted_tools.append(formatted_tool)
new_instance = self.copy() # 创建新实例避免污染原配置
new_instance.tools = formatted_tools
return new_instance # 返回自身类型
@property
def _llm_type(


750

被折叠的 条评论
为什么被折叠?



