langchain入门基础
一天半的时间,把 langchain 的入门理了一次。打铁趁熟。现在,我就把入门写一下吧。
langchain,我们可以理解为对 ai 的边界划分。因为我们在生活和工作中,一天天的都在说ai。那么,如果只是说让ai在你干嘛。他是没有边界感的。你想他查你们公司的销量。他返回给你的可能是某个上市公司的公开数据也有可能。所以,这个时候,就需要有 langchain 来为你做边界感。
这儿,我是以 fastApi 和 lanchain 两个框架结合起来使用。在实际工作中,也常常使用这两个框架结合起来。因为 langchain 它就是 python 来写的。安装的,在这儿我就不多说了。基本上大家都会,实在不行,让ai 帮你安装也行。
基础入门
新建配置文件
# 在根目录新建一个配置文件.env KEY=sk-******** URL=https://api.deepseek.com/v1新建智能体文件
# 在根目录中新建一个智能体文件,我们先以 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)在需要显示的页面上书写
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小进阶
提示词模板
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"使用工具
#此文件在根目录的 toos/testTool.py from langchain_core.tools import tool @tool def add(a:int , b:int ) -> int: """需要执行两个数相加时使用""" return a + b#主文件中上面的一样,这儿就不多写了 from tools.testTool import add as add_test #引入刚才的工具文件 llm = create_agent( model=llm_agent, tools=[add_test], #注入工具,多个工具就在数组里面相应添加 )