Langchain封装DeepSeekLLM

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

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(

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值