一天半的时间,把 langchain 的入门理了一次。打铁趁熟。现在,我就把入门写一下吧。
langchain,我们可以理解为对 ai 的边界划分。因为我们在生活和工作中,一天天的都在说ai。那么,如果只是说让ai在你干嘛。他是没有边界感的。你想他查你们公司的销量。他返回给你的可能是某个上市公司的公开数据也有可能。所以,这个时候,就需要有 langchain 来为你做边界感。
这儿,我是以 fastApi 和 lanchain 两个框架结合起来使用。在实际工作中,也常常使用这两个框架结合起来。因为 langchain 它就是 python 来写的。安装的,在这儿我就不多说了。基本上大家都会,实在不行,让ai 帮你安装也行。
基础入门
新建配置文件
bash
# 在根目录新建一个配置文件.env
KEY=sk-********
URL=https://api.deepseek.com/v1
新建智能体文件
python
# 在根目录中新建一个智能体文件,我们先以 agent.py 为命命
import os
from dotenv import load_dotenv #配置文件的导入类
from langchain_openai import ChatOpenAI
load_dotenv()
model = "deepseek-chat"
api_key = os.getenv("KEY")
base_url = os.getenv("URL")
agent = ChatOpenAI(model=model, api_key=api_key, base_url=base_url)
在需要显示的页面上书写
python
from fastapi import FastAPI
from langchain.agents import create_agent
from agent import agent as llm_agent #这儿是引入刚新建的智能体。之所有这样搞是把通用的提取出来。这个不多说
fastAPI = FastAPI()
@fastAPI.get("/")
async def index(query:str):
llm = create_agent(
model=llm_agent,
)
invokeInput = {
"messages":[
("user", query)
]
}
#这儿我说明一下
# llm_agent,是原始封装,是 ChatOpenAI 实例。所以 在 invoke 中传的是 【消息列表】
# llm 创建的是一个 AgentExecutor,它传的是字典,也就是 json 对象或元组对象
# 消息列表
# 这几个是需要引入的
# systemMessage = SystemMessage("你是一名英文翻译家")
# humanMessage = HumanMessage(query)
# messages = [systemMessage, humanMessage]
result = llm.invoke(invokeInput)
print(result)
# result["messages"][-1].content
return result["messages"][-1].content

小进阶
提示词模板
python
from fastapi import FastAPI
from langchain.agents import create_agent
from langchain_core.prompts import ChatPromptTemplate
from agent import agent as llm_agent
fastAPI = FastAPI()
@fastAPI.get("/")
async def index(query:str):
#定义提示启边界
#写法一
prompt = ChatPromptTemplate.from_messages([
("system" , "你一名优秀的搞笑怪师"), #给ai 一个角色
("human" , "{question}") #简单理解为角色的名字对应下面的 result = chain.invoke({"question": query})
])
#写法二
prompt2 = ChatPromptTemplate.from_messages([
{"role":"system" , "content":"你是一名数学家"}, #给 ai 一个角色
{"role":"human" , "content":"{question}"}
])
#注意,使用 ChatPromptTemplate.from_messages() ,里面的参数是json 数组 或者是 元组数组。别搞错了。最后结果我以方法二来展示
llm = create_agent(
model=llm_agent,
tools=[],
)
chain = prompt2 | llm #这儿是把提示词模板丢给智能体后处理
result = chain.invoke({"question": query})
print(result)
return "hello"

使用工具
python
#此文件在根目录的 toos/testTool.py
from langchain_core.tools import tool
@tool
def add(a:int , b:int ) -> int:
"""需要执行两个数相加时使用"""
return a + b
python
#主文件中上面的一样,这儿就不多写了
from tools.testTool import add as add_test #引入刚才的工具文件
llm = create_agent(
model=llm_agent,
tools=[add_test], #注入工具,多个工具就在数组里面相应添加
)