
在之前的文章中,我们教过大家如何 5 分钟实现网站复刻,同时为大家介绍了 screenshot-to-code 这个开源项目,以及如何基于该项目增加调用 Gemini 模型,最终实现上传图片生成代码的效果。
当时就有不少小伙伴提出疑问,怎么快速找到需要修改的地方呢?
在此之前,我们要先花一些时间去了解阅读源码才能找到相关函数,但在今天,给大家介绍一个豆包MarsCode的利器:#Workspace,有了它,妈妈再也不用担心我找不到修改函数的入口啦!
今天给大家演示一下,如何利用豆包MarsCode 的 #Workspace 功能,快速上手修改开源项目!
在修改之前,需要首先了解并熟悉当前项目的模块和架构,我们可以使用豆包 MarsCode #Workspace 功能,总结并输出模块的架构:
接着,我们可以把 #Workspace 输出的 mermaid 内容,贴到 mermaid 在线展示网站(https://sourl.cn/RUYGf4)上,就得到了 screenshot-to-code 项目的模块架构:
了解熟悉完架构后,接着使用 #Workspace 让豆包MarsCode 告诉我们如何本地启动项目:
根据它给的方式,我们在终端内一步步执行,即可成功启动项目。
下一步,我们需要增加调用 Gemini 模型,但模块代码这么多,该怎么快速找到需要修改哪些地方呢?
这时我们再次使出 #Workspace 利器,可以看到豆包MarsCode精准地给出了我们要修改的地方:
接下来,让我们按照豆包MarsCode 给的教程,动手改起来。
首先,我们需要打开 frontend/src/lib/models.ts 增加 Gemini 模型的枚举。当输入 GEMINI 之后,豆包 MarsCode 自动为你推荐了补全代码,点击 Tab 键采纳即可。
紧接着,我们需要打开 frontend/src/App.tsx,找到修改入口:
我们先拿豆包 MarsCode 来解释一下这个函数的功能。
根据解释,该函数只是用于更新指令并生成代码,和我们要改的模型无关,我们忽略这个文件直接改后端代码。
后端部分主要修改 llm.py 和 generate_code.py 2 个文件。根据前面的架构介绍,llm.py 负责调用 LLM,generate_code.py 则是生成代码的路由处理。因此我们需要先改 llm.py,增加调用 Gemini。
在这里,我们直接复制上次的代码,修改 llm.py:
class Llm(Enum): GPT_4_VISION = "gpt-4-vision-preview" GPT_4_TURBO_2024_04_09 = "gpt-4-turbo-2024-04-09" GPT_4O_2024_05_13 = "gpt-4o-2024-05-13" CLAUDE_3_SONNET = "claude-3-sonnet-20240229" CLAUDE_3_OPUS = "claude-3-opus-20240229" CLAUDE_3_HAIKU = "claude-3-haiku-20240307" CLAUDE_3_5_SONNET_2024_06_20 = "claude-3-5-sonnet-20240620" //新增gemini GEMINI_1_5_PRO_LATEST = "gemini-1.5-pro-latest" async def stream_gemini_response( messages: List[ChatCompletionMessageParam], api_key: str, callback: Callable[[str], Awaitable[None]],) -> str: genai.configure(api_key=api_key) generation_config = genai.GenerationConfig( temperature = 0.0 ) model = genai.GenerativeModel( model_name = "gemini-1.5-pro-latest", generation_config = generation_config ) contents = parse_openai_to_gemini_prompt(messages); response = model.generate_content( contents = contents, #Support streaming stream = True, ) for chunk in response: content = chunk.text or "" await callback(content)
if not response: raise Exception("No HTML response found in AI response") else: return response.text;
def parse_openai_to_gemini_prompt(prompts): messages = [] for prompt in prompts: message = {} message['role'] = prompt['role'] if prompt['role'] == 'system': message['role'] = 'user' if prompt['role'] == 'assistant': message['role'] = 'model' message['parts'] = [] content = prompt['content'] if isinstance(content, list): for content in prompt['content']: part = {} if content['type'] == 'image_url': base64 = content['image_url']['url'] part['inline_data'] = { 'data': base64.split(",")[1], 'mime_type': base64.split(";")[0].split(":")[1] } elif content['type'] == 'text': part['text'] = content['text'] message['parts'].append(part) else: message['parts'] = [content] messages.append(message) return messages最后,我们再修改 generate_code.py,增加调用 Gemini 的函数:
if validated_input_mode == "video": if not anthropic_api_key: await throw_error( "Video only works with Anthropic models. No Anthropic API key found. Please add the environment variable ANTHROPIC_API_KEY to backend/.env or in the settings dialog" ) raise Exception("No Anthropic key")
completion = await stream_claude_response_native( system_prompt=VIDEO_PROMPT, messages=prompt_messages, # type: ignore api_key=anthropic_api_key, callback=lambda x: process_chunk(x), model=Llm.CLAUDE_3_OPUS, include_thinking=True, ) exact_llm_version = Llm.CLAUDE_3_OPUS elif ( code_generation_model == Llm.CLAUDE_3_SONNET or code_generation_model == Llm.CLAUDE_3_5_SONNET_2024_06_20 ): if not anthropic_api_key: await throw_error( "No Anthropic API key found. Please add the environment variable ANTHROPIC_API_KEY to backend/.env or in the settings dialog" ) raise Exception("No Anthropic key")
completion = await stream_claude_response( prompt_messages, # type: ignore api_key=anthropic_api_key, callback=lambda x: process_chunk(x), model=code_generation_model, ) exact_llm_version = code_generation_model # 增加调用gemini elif ( code_generation_model == Llm.GEMINI_1_5_PRO_LATEST ): if not GEMINI_API_KEY: await throw_error( "No GEMINI API key found. Please add the environment variable ANTHROPIC_API_KEY to backend/.env or in the settings dialog" ) raise Exception("No GEMINI key")
completion = await stream_gemini_response( prompt_messages, # type: ignore api_key=GEMINI_API_KEY, callback=lambda x: process_chunk(x), ) exact_llm_version = code_generation_model else: completion = await stream_openai_response( prompt_messages, # type: ignore api_key=openai_api_key, base_url=openai_base_url, callback=lambda x: process_chunk(x), model=code_generation_model, ) exact_llm_version = code_generation_model经过以上几个步骤的修改,我们就完成了代码修改部分,最后我们再安装 google-generativeai 库:
cd backendpoetry add google-generativeai安装完库后,再次启动项目,就可以愉快地使用 Gemini 来生成代码啦,大家赶快去试试使用 #Workspace 吧!
更多内容推荐
21|部署一个鲜花网络电商的人脉工具(下)
带你继续完成易速鲜花电商人脉工具的后续部分。
2023-10-25
Meta、微软、Mistral AI、Hugging Face、通义、港中文六路进发开源大模型 | 大模型一周大事
大模型的快节奏发展,让了解最新技术动态、积极主动学习成为每一位从业者的必修课。InfoQ研究中心期望通过每周更新大模型行业最新动态,为广大读者提供全面的行业回顾和要点分析。
智谱新发开源大模型:9B 参数,覆盖编程场景
“过去几年智谱的商业实践为我们积累了非常多的经验,不敢说是 best practice,但是 better practice。”张鹏在演讲中如是说。
两天内,两大开源模型打擂台:都在卷更小、更便宜、更快、更简洁
在涵盖不同语言的多语种MMLU基准测试当中,Mistral Large 2的表现与Meta全新的Llama 3.1-405B相当,而且由于体量较小,所以有着更加显著的成本效益。
当在本地就可以运行 AI 代码助手时,谁还需要 GitHub Copilot 呢?
作为生成式人工智能的早期用例,代码助手实践已经获得了相当多的关注——尤其是在微软推出GitHub Copilot之后。但是,如果你不喜欢让微软动你的代码,或者不愿意每月支付10美元的费用,那么你可以构建自己的助手。
14|工具和工具箱:LangChain 中的 Tool 和 Toolkits 一览
这节课我们来看看 LangChain 中各种强大的工具,以及如何使用它们。
2023-10-09
网易有道 CEO 周枫:模型即应用的时代到来,Super App 随时会诞生
作者 | 华卫 “大模型的Super App尚未出现,但随时可能会诞生。” 3.0。 现场,网易有道CEO周枫表示:“当前已经是‘模型即应用’的时代,但大模型也不是万能的,关键是抓住场景。
通义千问升级旗舰模型 Qwen-Max,性能接近 GPT-4o
9月19日云栖大会,阿里云CTO周靖人宣布,通义旗舰模型Qwen-Max全方位升级,性能接近GPT-4o。
Llama 3 In Action:部署策略和高级特性应用
Meta发布Llama 3模型,含8亿和70亿参数版本,均开源并支持商业用途。模型性能提升主要得益于数据工程优化。生产环境部署时需考虑计算资源和成本,AWS提供了多种实例选择。Llama 3的开源促进了社区创新应用的发展。
编程语言面壁小钢炮 3.0 重磅发布!“无限”长文本,性能超 Kimi
量化后仅 2GB 内存,端侧友好~
智谱清言 App 全新升级视频通话功能,并推出新一代基座大模型
CogVideoX-5B 开源、GLM-4-Flash 免费
神秘大模型一夜“征服”所有人,超 GPT-4 却无人认领?网友:OpenAI 要有大麻烦了
整理 | 华卫基准测试网站的神秘模型,在大模型领域掀起了巨大波澜。gpt2-chatbot。没有出处,也没有介绍,在没有官方文件的情况下,一夜间“惊艳”所有人的视线。
国产版 Sora 到来!视频大模型更上一层楼 | 大模型一周大事
大模型的快节奏发展,让了解最新技术动态、积极主动学习成为每一位从业者的必修课。InfoQ研究中心期望通过每周更新大模型行业最新动态,为广大读者提供全面的行业回顾和要点分析。
17|HuggingFace 与 Pre-trained Model:借助 AI 社区的力量
2023-10-25
吴恩达发布开源 Python 库,一个接口可调用多个大模型
无缝对接 OpenAI 、Anthropic 、Azure 、Google 等多家 AI 服务商~
23|易速鲜花聊天客服机器人的开发(下)
Streamlit 和 Gradio 都是让数据科学家和开发者能够快速为机器学习模型创建 Web UI 的框架。
2023-10-30
22|易速鲜花聊天客服机器人的开发(上)
在这个聊天机器人的构建过程中,我们会进一步复习 LangChain 中的对话模型、提示模板、记忆的实现,以及检索功能和 RAG 功能的实现。
2023-10-27
跟大厂拼价格到底!智谱 AI 宣布模型全面降价,刘慈欣、AI 老罗线上“整活儿”
还可以根据使用规模快速为调整价格和并发
Firebase Vertex AI SDK 简化基于 Gemini 的移动应用开发
本文提到 Firebase Vertex AI SDK 测试阶段,助力开发超越简单聊天模型的应用程序,提供colab集成SDK步骤,支持多模态输入,简化开发者工作流。
编程语言
推荐阅读
电子书

大厂实战PPT下载
换一换 
梁勇 | 前 哈啰出行 高级技术专家
高策 | TensorChord 联合创始人兼 CEO
童超 | 360 AI研究院/产品及对外合作负责人






评论