LLMchain
链其实可以被视为 LangChain 中的一种基本功能单元。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 相当于直接调用内部的 _call_ or run # 导入所需的库from langchain import Prompt Template, OpenAI, LLMChain # 原始字符串模板 template = "{flower}的花语是?" # 创建模型实例 llm = OpenAI(temperature = 0 ) # 创建LLMChain llm_chain = LLMChain( llm = llm, prompt = PromptTemplate.from_template(template)) # 调用LLMChain,返回结果 result = llm_chain( "玫瑰" ) print (result) # chain(参数dict) ~ chain.__call__ prompt = PromptTemplate( input_variables = [ "flower" , "season" ], template = "{flower}在{season}的花语是?" , ) llm_chain = LLMChain(llm = llm, prompt = prompt) print (llm_chain({ 'flower' : "玫瑰" , 'season' : "夏季" })) # chain.predict(flower="玫瑰") result = llm_chain.predict(flower = "玫瑰" ) print (result) # apply允许您针对输入列表运行链 input_list = [ { "flower" : "玫瑰" , 'season' : "夏季" }, { "flower" : "百合" , 'season' : "春季" }, { "flower" : "郁金香" , 'season' : "秋季" }] result = llm_chain. apply (input_list) print (result) generate 方法类似于 apply ,只不过它返回一个 LLMResult 对象,而不是字符串。LLMResult 通常包含模型生成文本过程中的一些相关信息,例如令牌数量、模型名称等。 result = llm_chain.generate(input_list) print (result) |
Sequential Chain:顺序链
from langchain.llms import OpenAIfrom langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.chains import SequentialChain # 这是总的链,我们按顺序运行这三个链 overall_chain = SequentialChain( chains=[introduction_chain, review_chain, social_post_chain], input_variables=["name", "color"], output_variables=["introduction","review","social_post_text"], verbose=True) # 运行链,并打印结果 result = overall_chain({"name":"玫瑰", "color": "黑色"}) print(result)
ReAct框架,推理与行动的协同
在 LangChain 中使用代理,我们只需要理解下面三个元素。
大模型:提供逻辑的引擎,负责生成预测和处理输入。
与之交互的外部工具:可能包括数据清洗工具、搜索引擎、应用程序等。
控制交互的代理:调用适当的外部工具,并管理整个交互过程的流程。
from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI llm = OpenAI(temperature=0) tools = load_tools(["serpapi", "llm-math"], llm=llm) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run("目前市场上玫瑰花的平均价格是多少?如果我在此基础上加价15%卖出,应该如何定价?")
源码解析
agent 类方法 from_llm_and_tools 实例化了一个 agent_obj
然后用
返回 AgentExecutor 实例
run 的时候
代理(Agent)
这个类决定下一步执行什么操作。它由一个语言模型和一个提示(prompt)驱动。提示可能包含代理的性格(也就是给它分配角色,让它以特定方式进行响应)、任务的背景(用于给它提供更多任务类型的上下文)以及用于激发更好推理能力的提示策略(例如 ReAct)。LangChain 中包含很多种不同类型的代理。
工具(Tools):
工具是代理调用的函数。这里有两个重要的考虑因素:一是让代理能访问到正确的工具,二是以最有帮助的方式描述这些工具。如果你没有给代理提供正确的工具,它将无法完成任务。如果你没有正确地描述工具,代理将不知道如何使用它们。LangChain 提供了一系列的工具,同时你也可以定义自己的工具。
工具包(Toolkits):
工具包是一组用于完成特定目标的彼此相关的工具,每个工具包中包含多个工具。比如 LangChain 的 Office365 工具包中就包含连接 Outlook、读取邮件列表、发送邮件等一系列工具。当然 LangChain 中还有很多其他工具包供你使用。
代理执行器(AgentExecutor)
:代理执行器是代理的运行环境,它调用代理并执行代理选择的操作。执行器也负责处理多种复杂情况,包括处理代理选择了不存在的工具的情况、处理工具出错的情况、处理代理产生的无法解析成工具调用的输出的情况,以及在代理决策和工具调用进行观察和日志记录。
Prompty源码解析
背景 带着问题看源码是最效率的,
我这边穿了 dict 但是最后出来的是一个的"content=[...]"的string类型给openapi
解析
这里调用了
在这里被转成了 string
为什么会走到这里 其实和我一开始定义的
有关
本质和这样没区别
相当于 这样
我们需要找一个 不会被乱解析的 PromptTemplate
找了一下 没找打 只有string类型 PromptTemplate 可以自己实现一个
定制langchain的Tools 实现自己想要的功能
导入的load_tools 需要重写 然后从这边入手
实现了 但是 自然语音理解错我们的意思了
langserver和本地一样 循环的原理 -sse
try:
from sse_starlette import EventSourceResponse
except ImportError:
EventSourceResponse = Any
API VIEW
EventSourceResponse(_stream())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通