Langchain-Chatchat icon indicating copy to clipboard operation
Langchain-Chatchat copied to clipboard

如何将工具调用之后结果作为Final Answer输出

Open zgz757183190 opened this issue 10 months ago • 7 comments

工具名称: weather_check

工具状态: 调用成功

工具输入: 北京

工具输出: {'temperature': '13', 'description': '阴'}

大佬,请教一下,如何将Observation输出的数据作为Final Answer最终输出的结果呢?

zgz757183190 avatar Apr 09 '24 11:04 zgz757183190

你好,@zgz757183190! 我是Dosu,一个特别设计来帮助解决问题、回答问题并协助成为贡献者的机器人。虽然我是机器人,但我在等待人类维护者的同时,我在这里为你提供帮助。我会立刻查看你的问题,并很快给你一个完整的答案。🤖

dosubot[bot] avatar Apr 09 '24 11:04 dosubot[bot]

你好,@zgz757183190! 我是Dosu,一个特别设计来帮助解决问题、回答问题并协助成为贡献者的机器人。虽然我是机器人,但我在等待人类维护者的同时,我在这里为你提供帮助。我会立刻查看你的问题,并很快给你一个完整的答案。🤖

请问我这个问题如何解决呢,帮忙提供一个案例,多谢!

zgz757183190 avatar Apr 09 '24 11:04 zgz757183190

Based on your request, you want to use the output data from the weather_check tool as the final answer in your application. Here's how you can do it:

  1. Import the weathercheck function from the weather_check.py module.
  2. Call the weathercheck function with the location string (e.g., "北京") as its argument.
  3. Use the returned dictionary directly in your application as needed.

Here's an example code snippet demonstrating these steps:

from server.agent.tools.weather_check import weathercheck

# Call the weathercheck function with the desired location
weather_data = weathercheck("北京")

# Use the weather_data in your application
print(f"Temperature: {weather_data['temperature']}°C, Description: {weather_data['description']}")

This code imports the weathercheck function, calls it with "北京" as the input, and then prints the temperature and weather description. You can replace the print statement with any other logic in your application that requires the weather data.

The weather_check tool is included in the Langchain-Chatchat codebase and is defined in the server/agent/tools_select.py file with the name "weather_check". It is intended to be used for weather checking purposes, as indicated by its inclusion in the tools list with a corresponding args_schema=WeatherInput.

You can find more details in the following sources:

I hope this helps! If you have any other questions, feel free to ask.

-Dosu

Sources

About Dosu

This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

If you want to continue the conversation, start your reply with @dosu-bot.

dosubot[bot] avatar Apr 09 '24 11:04 dosubot[bot]

Based on your request, you want to use the output data from the weather_check tool as the final answer in your application. Here's how you can do it:

  1. Import the weathercheck function from the weather_check.py module.
  2. Call the weathercheck function with the location string (e.g., "北京") as its argument.
  3. Use the returned dictionary directly in your application as needed.

Here's an example code snippet demonstrating these steps:

from server.agent.tools.weather_check import weathercheck

# Call the weathercheck function with the desired location
weather_data = weathercheck("北京")

# Use the weather_data in your application
print(f"Temperature: {weather_data['temperature']}°C, Description: {weather_data['description']}")

This code imports the weathercheck function, calls it with "北京" as the input, and then prints the temperature and weather description. You can replace the print statement with any other logic in your application that requires the weather data.

The weather_check tool is included in the Langchain-Chatchat codebase and is defined in the server/agent/tools_select.py file with the name "weather_check". It is intended to be used for weather checking purposes, as indicated by its inclusion in the tools list with a corresponding args_schema=WeatherInput.

You can find more details in the following sources:

I hope this helps! If you have any other questions, feel free to ask.

-Dosu

Sources

About Dosu

我想要的结果是,Final Answer的结果为Observation的源数据

zgz757183190 avatar Apr 09 '24 11:04 zgz757183190

Based on your requirements, you want to output the raw data from the weather_check tool without any additional processing or formatting. However, as per the current implementation of the weather_check tool in the Langchain-Chatchat codebase, it specifically formats the response to return only the "temperature" and "description" fields from the API's response.

To achieve your requirement, you would need to modify the weather function in the weather_check.py module to return the raw JSON data received from the API call instead of the processed dictionary. Here's how you can do it:

def weather(location: str, api_key: str):
    url = f"https://api.seniverse.com/v3/weather/now.json?key={api_key}&location={location}&language=zh-Hans&unit=c"
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        return data  # Return the raw data
    else:
        raise Exception(
            f"Failed to retrieve weather: {response.status_code}")

By returning data directly from the weather function, you ensure that the caller, in this case, the weathercheck function, receives the complete raw JSON data from the API response. This modification bypasses the previous step where the data was being processed and formatted into a simplified dictionary, thus fulfilling your requirement to output the raw data as the final answer.

Please note that this change will affect all parts of your application that use the weather function, as they will now receive the raw JSON data instead of the processed dictionary. Make sure to adjust your application accordingly to handle this change.

For more details, you can refer to the source code of the weather_check tool in the Langchain-Chatchat codebase: server/agent/tools/weather_check.py.

Sources

About Dosu

This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

If you want to continue the conversation, start your reply with @dosu-bot.

dosubot[bot] avatar Apr 09 '24 11:04 dosubot[bot]

Final Answer 已经是Agent结束了,为什么还能做Observation呢

zRzRzRzRzRzRzR avatar Apr 09 '24 15:04 zRzRzRzRzRzRzR

@classmethod
    def from_function(
        cls,
        func: Optional[Callable] = None,
        coroutine: Optional[Callable[..., Awaitable[Any]]] = None,
        name: Optional[str] = None,
        description: Optional[str] = None,
        return_direct: bool = False,
        args_schema: Optional[Type[BaseModel]] = None,
        infer_schema: bool = True,
        **kwargs: Any,
    ) -> StructuredTool:
        """Create tool from a given function.

        A classmethod that helps to create a tool from a function.

        Args:
            func: The function from which to create a tool
            coroutine: The async function from which to create a tool
            name: The name of the tool. Defaults to the function name
            description: The description of the tool. Defaults to the function docstring
            return_direct: Whether to return the result directly or as a callback
            args_schema: The schema of the tool's input arguments
            infer_schema: Whether to infer the schema from the function's signature
            **kwargs: Additional arguments to pass to the tool

        Returns:
            The tool

试试return_direct=True

linjt325 avatar May 08 '24 04:05 linjt325

在工程文件的server/chat/agent_chat.py里找到 final_answer 的参数,再把你想要的东西拼接起来就好了 73dc24320624f15902ef7e81db508a9

AKA-WDNMD avatar Jun 03 '24 03:06 AKA-WDNMD