企业网站seo排名优化,重庆城市,可以悬赏做任务的叫什么网站,网站开发流程前端有时我们希望在调用代理时能够对其进行配置。这包括配置使用哪个语言模型#xff08;LLM#xff09;等例子。下面我们将通过一个示例来详细介绍如何进行这样的配置。 在介绍 configurable 之前我们先介绍一下 Langchain 的 RunnableConfig。RunnableConfig是一个配置对象LLM等例子。下面我们将通过一个示例来详细介绍如何进行这样的配置。 在介绍 configurable 之前我们先介绍一下 Langchain 的 RunnableConfig。RunnableConfig是一个配置对象用于自定义运行链(Chain)、工具(Tool)或任何可运行组件的行为。它允许我们控制执行过程中的各种参数和行为是LangChain统一接口的重要组成部分。 它的主要功能和属性包括
callbacks: 允许你注册回调函数在执行过程中的不同阶段触发用于日志记录、监控或调试。tags:为执行添加标签便于追踪和分类。metadata: 添加元数据信息可用于记录额外的上下文信息。run_name:为当前运行指定一个名称在追踪和日志中使用。configurable: 允许你在运行时动态配置组件。 运行时为此Runnable或子Runnable上通过.configurable_fields()或.configurable_alternatives()方法之前设为可配置的属性提供的值。查看.output_schema()获取已设为可配置的属性的描述。max_concurrency: 控制并发执行的最大数量。recursion_limit: 设置递归调用的最大次数。如果未提供则默认为25。run_id: 这是调用的追踪器运行的唯一标识符。如果未提供将生成一个新的UUID。
定义图
首先我们先创建一个非常简单的图
import operator
from typing import Annotated, Sequence
from typing_extensions import TypedDictfrom langchain_openai import ChatOpenAI
from langchain_core.messages import BaseMessage, HumanMessagefrom langgraph.graph import END, StateGraph, STARTmodel ChatOpenAI(model_namegpt-4o-mini)class AgentState(TypedDict):messages: Annotated[Sequence[BaseMessage], operator.add]def _call_model(state):# state[messages]response model.invoke(state[messages])return {messages: [response]}# Define a new graph
builder StateGraph(AgentState)
builder.add_node(model, _call_model)
builder.add_edge(START, model)
builder.add_edge(model, END)graph builder.compile()from IPython.display import display, Image
display(Image(graph.get_graph().draw_mermaid_png()))得到如下图
configurable
然后为了扩展这个例子以允许用户从多个语言模型LLM中进行选择并通过配置传递这些信息我们可以将配置信息放在一个名为 configurable 的 key 内。这种方式可以确保配置信息与输入数据分离不作为状态的一部分进行跟踪。
from langchain_openai import ChatOpenAI
from typing import Optional
from langchain_core.runnables.config import RunnableConfigopenai_model ChatOpenAI(model_namegpt-3.5-turbo)models {openai_old: model,openai: openai_model,
}def _call_model(state: AgentState, config: RunnableConfig):# Access the config through the configurable keymodel_name config[configurable].get(model, openai_old)model models[model_name]response model.invoke(state[messages])return {messages: [response]}# Define a new graph
builder StateGraph(AgentState)
builder.add_node(model, _call_model)
builder.add_edge(START, model)
builder.add_edge(model, END)graph builder.compile()from IPython.display import display, Image
display(Image(graph.get_graph().draw_mermaid_png()))然后我们调用这个选择特定配置的图
graph.invoke({messages: [HumanMessage(contenthi)]})得到结果
{messages: [HumanMessage(contenthi, additional_kwargs{}, response_metadata{}),AIMessage(contentHello! How can I assist you today?, additional_kwargs{refusal: None}, response_metadata{token_usage: {completion_tokens: 9, prompt_tokens: 8, total_tokens: 17, completion_tokens_details: {accepted_prediction_tokens: 0, audio_tokens: 0, reasoning_tokens: 0, rejected_prediction_tokens: 0}, prompt_tokens_details: {audio_tokens: 0, cached_tokens: 0}}, model_name: gpt-4o-mini-2024-07-18, system_fingerprint: fp_b705f0c291, finish_reason: stop, logprobs: None}, idrun-78fbb4d3-e64e-41dc-871f-fe08e3317f07-0, usage_metadata{input_tokens: 8, output_tokens: 9, total_tokens: 17, input_token_details: {audio: 0, cache_read: 0}, output_token_details: {audio: 0, reasoning: 0}})]}我们可以通过传入配置来调用它以使其使用不同的模型。
config {configurable: {model: openai}}
graph.invoke({messages: [HumanMessage(contenthi)]}, configconfig)得到下面结果
{messages: [HumanMessage(contenthi, additional_kwargs{}, response_metadata{}),AIMessage(contentHello! How can I assist you today?, additional_kwargs{refusal: None}, response_metadata{token_usage: {completion_tokens: 9, prompt_tokens: 8, total_tokens: 17, completion_tokens_details: None, prompt_tokens_details: None}, model_name: gpt-3.5-turbo-0125, system_fingerprint: fp_0165350fbb, finish_reason: stop, logprobs: None}, idrun-1fe66150-1579-4bba-b35f-06c3f66cd2d2-0, usage_metadata{input_tokens: 8, output_tokens: 9, total_tokens: 17, input_token_details: {}, output_token_details: {}})]}我们还可以调整图形以进行更多配置例如系统消息。 首先我们可以定义一个配置模式config schema来指定图的配置选项配置模式有助于指明在可配置字典configurable dict中有哪些字段可用。
from langchain_core.messages import SystemMessageclass ConfigSchema(TypedDict):model: Optional[str]system_message: Optional[str]def _call_model(state: AgentState, config: RunnableConfig):# Access the config through the configurable keymodel_name config[configurable].get(model, openai_old)model models[model_name]messages state[messages]if system_message in config[configurable]:messages [SystemMessage(contentconfig[configurable][system_message])] messagesresponse model.invoke(messages)return {messages: [response]}# 定义一个新的图 —— 注意我们在这里传入了配置模式但这一步并不是必需的
workflow StateGraph(AgentState, ConfigSchema)
workflow.add_node(model, _call_model)
workflow.add_edge(START, model)
workflow.add_edge(model, END)graph workflow.compile()得到下面结果
graph.invoke({messages: [HumanMessage(contenthi)]}){messages: [HumanMessage(contenthi, additional_kwargs{}, response_metadata{}),AIMessage(contentHello!, additional_kwargs{}, response_metadata{id: msg_01VgCANVHr14PsHJSXyKkLVh, model: claude-2.1, stop_reason: end_turn, stop_sequence: None, usage: {input_tokens: 10, output_tokens: 6}}, idrun-f8c5f18c-be58-4e44-9a4e-d43692d7eed1-0, usage_metadata{input_tokens: 10, output_tokens: 6, total_tokens: 16})]}config {configurable: {system_message: 用韩语回答}}
graph.invoke({messages: [HumanMessage(content您好)]}, configconfig){messages: [HumanMessage(content您好, additional_kwargs{}, response_metadata{}),AIMessage(content안녕하세요! 어떻게 도와드릴까요?, additional_kwargs{refusal: None}, response_metadata{token_usage: {completion_tokens: 10, prompt_tokens: 16, total_tokens: 26, completion_tokens_details: {accepted_prediction_tokens: 0, audio_tokens: 0, reasoning_tokens: 0, rejected_prediction_tokens: 0}, prompt_tokens_details: {audio_tokens: 0, cached_tokens: 0}}, model_name: gpt-4o-mini-2024-07-18, system_fingerprint: fp_ded0d14823, finish_reason: stop, logprobs: None}, idrun-1046d220-3a32-4792-9665-0a14528f9d53-0, usage_metadata{input_tokens: 16, output_tokens: 10, total_tokens: 26, input_token_details: {audio: 0, cache_read: 0}, output_token_details: {audio: 0, reasoning: 0}})]}