-
Notifications
You must be signed in to change notification settings - Fork 258
Open
Description
一、引入版本
<dependency>
<groupId>com.google.adk</groupId>
<artifactId>google-adk</artifactId>
<version>0.5.0</version>
</dependency>
<dependency>
<groupId>com.google.adk</groupId>
<artifactId>google-adk-dev</artifactId>
<version>0.5.0</version>
</dependency>
<dependency>
<groupId>com.google.adk</groupId>
<artifactId>google-adk-spring-ai</artifactId>
<version>0.5.0</version>
</dependency>
二、测试代码
import com.alibaba.fastjson.JSON;
import com.google.adk.agents.LlmAgent;
import com.google.adk.events.Event;
import com.google.adk.models.springai.SpringAI;
import com.google.adk.runner.InMemoryRunner;
import com.google.adk.sessions.Session;
import com.google.genai.types.Content;
import com.google.genai.types.Part;
import io.reactivex.rxjava3.core.Flowable;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.content.Media;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.MimeType;
import org.springframework.util.MimeTypeUtils;
import java.io.InputStream;
public class SpringAiApiTest {
public static void main(String[] args) throws Exception {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream resourceAsStream = classLoader.getResourceAsStream("dog.png");
Resource resource = new ClassPathResource("dog.png", classLoader);
assert resourceAsStream != null;
OpenAiApi openAiApi = OpenAiApi.builder()
.baseUrl("https://apis.xxx")
.apiKey("sk-zahsFUzQcpOauNQUD3918eEe95194d...*****")
.completionsPath("v1/chat/completions")
.embeddingsPath("v1/embeddings")
.build();
ChatModel chatModel = OpenAiChatModel.builder()
.openAiApi(openAiApi)
.defaultOptions(OpenAiChatOptions.builder()
.model("gpt-4o")
.build())
.build();
// 模型测试,没问题可以识别图片
// ChatResponse response = chatModel.call(new Prompt(
// UserMessage.builder()
// .text("请描述这张图片的主要内容,并说明图中物品的可能用途。")
// .media(Media.builder()
// .mimeType(MimeType.valueOf(MimeTypeUtils.IMAGE_PNG_VALUE))
// .data(resource)
// .build())
// .build(),
// OpenAiChatOptions.builder()
// .model("gpt-4o")
// .build()));
//
// System.out.println("测试结果" + JSON.toJSONString(response));
// agent 测试
LlmAgent agent = LlmAgent.builder()
.name("test")
.description("Chess coach agent")
.model(new SpringAI(chatModel))
.instruction("""
You are a knowledgeable chess coach
who helps chess players train and sharpen their chess skills.
""")
.build();
InMemoryRunner runner = new InMemoryRunner(agent);
Session session = runner
.sessionService()
.createSession("test", "fzw")
.blockingGet();
Flowable<Event> events = runner.runAsync("fzw", session.id(),
Content.fromParts(Part.fromText("这是什么图片"),
Part.fromBytes(resource.getContentAsByteArray(), MimeTypeUtils.IMAGE_PNG_VALUE)));
System.out.print("\nAgent > ");
events.blockingForEach(event -> System.out.println(event.stringifyContent()));
}
}- spring ai 模型直接测试可以识别图片
- 使用 google adk + spring ai 不能识别图片
三、找到问题
MessageConverter.java
List<Message> messages = new ArrayList<>();
// Create UserMessage with text
// TODO: Media attachments support - UserMessage constructors with media are private in Spring
// AI 1.1.0
// For now, only text content is supported
messages.add(new UserMessage(textBuilder.toString()));
messages.addAll(toolResponseMessages);
Metadata
Metadata
Assignees
Labels
No labels