Я столкнулся с проблемой внедрения параметров при использовании агента LangChain для вызова инструмента. Несмотря на то, что внедрение параметров, судя по сообщению AI, которое я печатаю, кажется успешным, вызов инструмента агента в конечном итоге получает пустые параметры, как если бы он все еще использовал исходное (пустое) сообщение вместо обновленного с введенными параметрами.Я использую следующую структуру кода для динамического внедрения параметров в api_tool. Соответствующие фрагменты кода следующие:
class APIToolInput(BaseModel):
swagger_file: Annotated[str, InjectedToolArg] = Field(..., description="The URL or file path to the OpenAPI (swagger) specification file, which describes the API's structure.")
method: Annotated[str, InjectedToolArg] = Field(..., description="The HTTP method to use for the API call.")
endpoint: Annotated[str, InjectedToolArg] = Field(..., description="The endpoint path to use for the API call.")
params: Optional[dict] = Field(description="A dictionary of query parameters to include in the API request.", default={})
headers: Optional[dict] = Field(description="A dictionary of headers to include in the API request.", default={})
@tool(parse_docstring=False, args_schema=APIToolInput)
def api_tool(swagger_file: Annotated[str, InjectedToolArg],
method: Annotated[str, InjectedToolArg],
endpoint: Annotated[str, InjectedToolArg],
params: Optional[dict] = {},
headers: Optional[dict] = {}) -> dict:
spec = OpenAPISpec.from_url(swagger_file)
url = spec.base_url
full_url = f"{url}{endpoint}"
try:
response_api = requests.request(
method=method,
url=full_url,
params=params,
headers=headers
)
except Exception as e:
return {"error": f"Failed to call API: {str(e)}"}
if response_api.status_code != 200:
return {"error": f"Failed to call API: {response_api.text}"}
return response_api.json()
@chain
def inject_parameters(ai_msg, **kwargs):
new_ai_msg = deepcopy(ai_msg)
# Inject parameters into additional_kwargs
for tool_call in new_ai_msg.additional_kwargs['tool_calls']:
arguments = "{" + ",".join([f'"{key}":"{value}"' for key, value in kwargs.items()]) + "}"
tool_call['function']['arguments'] = arguments
# Inject parameters into each tool call parameter
for tool_call in new_ai_msg.tool_calls:
tool_call["args"].update(kwargs)
return new_ai_msg
Настройка агента и рабочего процесса включает в себя введение параметров во время условного шага (should_continue) рабочего процесса langgraph. Вот как я вызываю агент и ввожу параметры:
Почему в печатном выводе внедрение параметров отображается как успешное, но во время выполнения вызова инструмента параметры по-прежнему остаются пустыми? Я что-то упускаю из того, как вызов инструмента обрабатывает введенные параметры, или может быть проблема с обработкой Langsmith обновленных сообщений?
Я столкнулся с проблемой внедрения параметров при использовании агента LangChain для вызова инструмента. Несмотря на то, что внедрение параметров, судя по сообщению AI, которое я печатаю, кажется успешным, вызов инструмента агента в конечном итоге получает пустые параметры, как если бы он все еще использовал исходное (пустое) сообщение вместо обновленного с введенными параметрами.Я использую следующую структуру кода для динамического внедрения параметров в api_tool. Соответствующие фрагменты кода следующие: [code]class APIToolInput(BaseModel): swagger_file: Annotated[str, InjectedToolArg] = Field(..., description="The URL or file path to the OpenAPI (swagger) specification file, which describes the API's structure.") method: Annotated[str, InjectedToolArg] = Field(..., description="The HTTP method to use for the API call.") endpoint: Annotated[str, InjectedToolArg] = Field(..., description="The endpoint path to use for the API call.") params: Optional[dict] = Field(description="A dictionary of query parameters to include in the API request.", default={}) headers: Optional[dict] = Field(description="A dictionary of headers to include in the API request.", default={})
if response_api.status_code != 200: return {"error": f"Failed to call API: {response_api.text}"}
return response_api.json()
@chain def inject_parameters(ai_msg, **kwargs): new_ai_msg = deepcopy(ai_msg) # Inject parameters into additional_kwargs for tool_call in new_ai_msg.additional_kwargs['tool_calls']: arguments = "{" + ",".join([f'"{key}":"{value}"' for key, value in kwargs.items()]) + "}" tool_call['function']['arguments'] = arguments
# Inject parameters into each tool call parameter for tool_call in new_ai_msg.tool_calls: tool_call["args"].update(kwargs)
return new_ai_msg [/code] Настройка агента и рабочего процесса включает в себя введение параметров во время условного шага (should_continue) рабочего процесса langgraph. Вот как я вызываю агент и ввожу параметры: [code]def call_agent(state: State) -> State: messages = state['messages'] response = agent.invoke(messages) state["messages"] = [response] return state
checkpointer = MemorySaver() app = workflow.compile(checkpointer=checkpointer) [/code] После ввода параметров напечатанное сообщение AI показывает правильность введенных параметров: [code][HumanMessage(content='What are the current bitcoin price?'), AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_KNwEt72ii9HJJkr3hRm7dQRG', 'function': {'arguments': '{"swagger_file":"https://api.apis.guru/v2/specs/interzoid.com/getcurrencyrate/1.0.0/openapi.json","method":"get","endpoint":"/getcurrencyrate"}', 'name': 'api_tool'}, 'type': 'function'}]}, tool_calls=[{'name': 'api_tool', 'args': {'swagger_file': 'https://api.apis.guru/v2/specs/interzoid.com/getcurrencyrate/1.0.0/openapi.json', 'method': 'get', 'endpoint': '/getcurrencyrate'}}])] [/code] Однако в трассировке Лангсмита вызов инструмента отображается пустым, что приводит к следующей ошибке: [code]ValidationError(model='APIToolInput', errors=[{'loc': ('swagger_file',), 'msg': 'field required', 'type': 'value_error.missing'}, {'loc': ('method',), 'msg': 'field required', 'type': 'value_error.missing'}, {'loc': ('endpoint',), 'msg': 'field required', 'type': 'value_error.missing'}]) [/code] Почему в печатном выводе внедрение параметров отображается как успешное, но во время выполнения вызова инструмента параметры по-прежнему остаются пустыми? Я что-то упускаю из того, как вызов инструмента обрабатывает введенные параметры, или может быть проблема с обработкой Langsmith обновленных сообщений?
Я использую Langgraph вместе с агентом React в Langchain для создания агента, который может выполнять инструменты (инструменты).
Мне нужно получить доступ к состоянию из Langgraph внутри инструмента или, по крайней мере, иметь возможность...
Я пытаюсь создать простого агента React, использующего Langchain, который использует инструмент для получения погодного условия местоположения
Я попытался сделать свой пользовательский шаблон быстрого приглашения и использовал «create_react_agent...
Я работаю на глупой странице для своих друзей, однако, когда код запрашивает пользовательский ввод, я не могу ввести какие -либо данные. Как я могу это исправить?import turtle as trtl
Я работаю на глупой странице для своих друзей, однако, когда код запрашивает пользовательский ввод, я не могу ввести какие -либо данные. Как я могу это исправить?
# import the turtle module
import turtle as trtl
Есть ли способ инициализации макетов, прежде чем они будут введены в другой компонент? @Service
SomeService {
@Autowired
public SomeService(SomeConfig config)
}
@Configuration
@Getter
@Setter
public class SomeConfig {
private String someValue;
}...