初步完成channel->queueu->[tool]->[queue]->[assistant]->channel的流程
【待处理】上下文管理和错误处理。
This commit is contained in:
+19
-15
@@ -3,13 +3,12 @@ use common::ai::{
|
||||
ChatCompletionRequestBody, ChatCompletionRequestExtra, ChatCompletionRequestMessage,
|
||||
ChatCompletionRequestThinking, ChatCompletionResponseBody,
|
||||
};
|
||||
use common::queue::QueueMessage;
|
||||
|
||||
|
||||
use common::queue::{AssistantMessage, ChannelMessage, QueueMessage};
|
||||
|
||||
pub async fn send_message(
|
||||
sender: tokio::sync::mpsc::Sender<QueueMessage>,
|
||||
messages: Vec<ChatCompletionRequestMessage>,
|
||||
channel: ChannelMessage,
|
||||
) -> Result<(), reqwest::Error> {
|
||||
let result = request_llm(messages).await;
|
||||
match result {
|
||||
@@ -18,25 +17,30 @@ pub async fn send_message(
|
||||
for choice in result.unwrap().choices {
|
||||
let messsage_content = choice.message.content;
|
||||
let messsage_reasoning = choice.message.reasoning_content.unwrap_or_default();
|
||||
if !messsage_content.trim().is_empty() || !messsage_content.trim().is_empty() {
|
||||
sender
|
||||
.send(QueueMessage::Aissitant(
|
||||
messsage_reasoning,
|
||||
messsage_content,
|
||||
))
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
let tool_calls = choice.message.tool_calls.clone();
|
||||
|
||||
sender
|
||||
.send(QueueMessage::Aissitant(
|
||||
channel.clone(),
|
||||
AssistantMessage {
|
||||
reasoning: Some(messsage_reasoning),
|
||||
content: messsage_content,
|
||||
tool_calls,
|
||||
},
|
||||
))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
match choice.message.tool_calls {
|
||||
Some(tool_calls) => {
|
||||
// eprintln!("调用了{}个工具", tool_calls.len());
|
||||
let queue_message = call_tools(tool_calls).await.unwrap();
|
||||
println!("调用了{}个工具", tool_calls.len());
|
||||
let queue_message = call_tools(channel.clone(), tool_calls).await.unwrap();
|
||||
if let Some(queue_message) = queue_message {
|
||||
sender.send(queue_message).await.unwrap();
|
||||
}
|
||||
}
|
||||
None => {
|
||||
// eprintln!("没有调用工具");
|
||||
eprintln!("没有调用工具");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-3
@@ -1,10 +1,14 @@
|
||||
use chrono::Local;
|
||||
use serde_json::error;
|
||||
|
||||
use common::{ai::ChatCompletionResponseToolCall, queue::QueueMessage};
|
||||
use common::{
|
||||
ai::ChatCompletionToolCall,
|
||||
queue::{ChannelMessage, QueueMessage},
|
||||
};
|
||||
|
||||
pub async fn call_tools(
|
||||
tools: Vec<ChatCompletionResponseToolCall>,
|
||||
channel: ChannelMessage,
|
||||
tools: Vec<ChatCompletionToolCall>,
|
||||
) -> Result<Option<QueueMessage>, error::Error> {
|
||||
if let Some(tool) = tools.first() {
|
||||
if let Some(funcation) = tool.function.as_ref() {
|
||||
@@ -12,6 +16,7 @@ pub async fn call_tools(
|
||||
let date_time = Local::now();
|
||||
let formatted = date_time.format("%Y-%m-%d %H:%M:%S").to_string();
|
||||
return Ok(Some(QueueMessage::Tool(
|
||||
channel,
|
||||
tool.id.clone(),
|
||||
funcation.name.clone(),
|
||||
format!("现在时间:{}", formatted),
|
||||
@@ -59,4 +64,4 @@ pub fn get_tool() -> Vec<serde_json::Value> {
|
||||
// }
|
||||
// }),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user