DeepSeek+LangChain:搭建一个基础的本地agent

找了一些LangChain的教程,很多都是用OpenAI作为例子的,但是魔法不稳定也不方便,为什么不试试方便快捷的DeepSeek呢?

1 所需准备

(1)下载LangChian

bash 复制代码
pip install langchain

先下载langchain包,后面可能还会用到一些包,遇到的时候再下载。 如果下载超时可以尝试使用清华镜像源。

bash 复制代码
pip install langchain -i https://pypi.tuna.tsinghua.edu.cn/simple

(2)准备好DeepSeek api 进入DeepSeek官网,点击右上角进入api开放平台。 点击左侧充值菜单,进入api充值页面,测试的时候可以先充个10块钱的试试看,后面不够再继续充值。 然后点击左侧API keys菜单,进入api key的管理页面,点击创建api key,创建好后记得复制保存,一旦创建好key就不可见啦。

2 agent搭建

接下来创建一个文件夹,在文件夹中创建以下文件。 (1) .env 将上面步骤中创建好的APIkey保存到这个文件中并保存

ini 复制代码
DEEPSEEK_API_KEY='{your_api_key}' #这里需要填入你自己创建的api key

(2)ds_chatbot.py 首先导入需要的包文件:

py 复制代码
from langchain_core.language_models import BaseLLM
from langchain_core.outputs import LLMResult
from typing import Optional, List, Any
import requests
import os
from dotenv import load_dotenv
# 对话部分内容
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory

然后读取环境变量中的api key:

py 复制代码
load_dotenv()

接下来继承langchain框架中的llm创建一个基于DeepSeek的类:

py 复制代码
class DeepSeekLLM(BaseLLM):
    api_key: str = os.getenv("DEEPSEEK_API_KEY", "")
    model: str = "deepseek-chat"
    temperature: float = 0.7
    max_tokens: int = 2048

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        if not self.api_key:
            raise ValueError("DEEPSEEK_API_KEY 未设置")

    def _generate(
        self,
        prompts: List[str],
        stop: Optional[List[str]] = None,
        **kwargs: Any,
    ) -> LLMResult:
        # 实现 _generate 方法(处理多个prompts)
        generations = []
        for prompt in prompts:
            text = self._invoke(prompt, stop=stop, **kwargs)
            generations.append([{"text": text}])
        return LLMResult(generations=generations)

    def _invoke(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        **kwargs: Any,
    ) -> str:
        """实际调用DeepSeek API"""
        url = "https://api.deepseek.com/v1/chat/completions"
        headers = {"Authorization": f"Bearer {self.api_key}"}
        data = {
            "model": self.model,
            "messages": [{"role": "user", "content": prompt}],
            "temperature": self.temperature,
            "max_tokens": self.max_tokens,
        }
        response = requests.post(url, headers=headers, json=data)
        response.raise_for_status()
        return response.json()["choices"][0]["message"]["content"]

    @property
    def _llm_type(self) -> str:
        return "deepseek"

接下来调用我们创建好的类就可以啦:

py 复制代码
llm = DeepSeekLLM()
    memory = ConversationBufferMemory()
    conversation = ConversationChain(llm=llm, memory=memory)
    
    print("DeepSeek 聊天机器人已启动(输入'退出'结束对话)")
    while True:
        try:
            user_input = input("你: ")
            if user_input.lower() in ["退出", "exit", "quit"]:
                break
            response = conversation.predict(input=user_input)
            print(f"AI助手: {response}")
        except KeyboardInterrupt:
            print("\n对话结束")
            break
        except Exception as e:
            print(f"出错: {e}")

3 测试运行

完整的ds_chatbot.py文件内容:

py 复制代码
# 这是一个最小单位能够运行的agent,后续会逐渐完善

from langchain_core.language_models import BaseLLM
from langchain_core.outputs import LLMResult
from typing import Optional, List, Any
import requests
import os
from dotenv import load_dotenv
# 对话部分内容
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory

load_dotenv()

class DeepSeekLLM(BaseLLM):
    api_key: str = os.getenv("DEEPSEEK_API_KEY", "")
    model: str = "deepseek-chat"
    temperature: float = 0.7
    max_tokens: int = 2048

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        if not self.api_key:
            raise ValueError("DEEPSEEK_API_KEY 未设置")

    def _generate(
        self,
        prompts: List[str],
        stop: Optional[List[str]] = None,
        **kwargs: Any,
    ) -> LLMResult:
        # 实现 _generate 方法(处理多个prompts)
        generations = []
        for prompt in prompts:
            text = self._invoke(prompt, stop=stop, **kwargs)
            generations.append([{"text": text}])
        return LLMResult(generations=generations)

    def _invoke(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        **kwargs: Any,
    ) -> str:
        """实际调用DeepSeek API"""
        url = "https://api.deepseek.com/v1/chat/completions"
        headers = {"Authorization": f"Bearer {self.api_key}"}
        data = {
            "model": self.model,
            "messages": [{"role": "user", "content": prompt}],
            "temperature": self.temperature,
            "max_tokens": self.max_tokens,
        }
        response = requests.post(url, headers=headers, json=data)
        response.raise_for_status()
        return response.json()["choices"][0]["message"]["content"]

    @property
    def _llm_type(self) -> str:
        return "deepseek"

# 使用示例
if __name__ == "__main__":
    '''
    llm = DeepSeekLLM()
    print("DeepSeek 聊天机器人已启动(输入'退出'结束对话)")
    while True:
        try:
            user_input = input("你: ")
            if user_input.lower() in ["退出", "exit", "quit"]:
                break
            response = llm.invoke(user_input)
            print(f"AI助手: {response}")
        except KeyboardInterrupt:
            print("\n对话结束")
            break
        except Exception as e:
            print(f"出错: {e}")
    '''

    llm = DeepSeekLLM()
    memory = ConversationBufferMemory()
    conversation = ConversationChain(llm=llm, memory=memory)
    
    print("DeepSeek 聊天机器人已启动(输入'退出'结束对话)")
    while True:
        try:
            user_input = input("你: ")
            if user_input.lower() in ["退出", "exit", "quit"]:
                break
            response = conversation.predict(input=user_input)
            print(f"AI助手: {response}")
        except KeyboardInterrupt:
            print("\n对话结束")
            break
        except Exception as e:
            print(f"出错: {e}")

接下来运行这个文件,我们就可以在ide的终端中和自己创建的聊天机器人进行对话了: 我们也可以去DeepSeek的api开放平台查看api的用量情况:

相关推荐
笨蛋不要掉眼泪8 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
CCPC不拿奖不改名12 小时前
RAG基础:基于LangChain 的文本分割实战+文本分块
人工智能·python·langchain·知识库·改行学it·rag·向量库
gentle coder13 小时前
【langchain】AI应用开发框架
langchain·llm·rag
OPEN-Source15 小时前
大模型实战:把 LangChain / LlamaIndex 工作流接入监控与告警体系
人工智能·langchain·企业微信·rag
重生之我要成为代码大佬16 小时前
LangChain-多任务应用开发
langchain·大模型·agent
doll ~CJ17 小时前
Large Language Model(LLM)应用开发学习实践(三)
langchain·llm·提示词工程·ai应用
玄同76518 小时前
LangChain v1.0+ 与 FastAPI 中间件深度解析:从概念到实战
人工智能·中间件·langchain·知识图谱·fastapi·知识库·rag
猫头虎19 小时前
2026全网最热Claude Skills工具箱,GitHub上最受欢迎的7大Skills开源AI技能库
langchain·开源·prompt·github·aigc·ai编程·agi
朱元禄19 小时前
AI Agent 实战课程 之 《RAG 闭环实操:RAG 闭环实操(讲师逐字稿)DeepSeek + LangChain》
人工智能·langchain
伊甸319 小时前
基于LangChain4j从0到1搭建自己的的AI智能体并部署上线-1
java·langchain·prompt